Django エラーページ表示の仕組み
はじめに
hr.icon
Djangoのエラーページ表示ってどういう仕組みなんだ!て気になった
なのでここにエラーページ表示の基本的な仕組みや、カスタマイズする方法などをまとめておく。
エラーページの表示に関しては、このページ見とけばできるようになると思われる
説明
hr.icon
そもそもエラーページって何??
「404 Not Found」など、サービスでエラーが発生したらよく表示されるページのこと。
https://scrapbox.io/files/6076f03827ffcf001c5f4878.png
エラーの種類
400代と500代はHTTPの世界ではエラーとされる
代表的なエラー
404:Not Found。ページが見当たらないよ
500:Server Error。サーバー内でなんかしらのエラーが発生したみたいよ
1. Djangoはどういう仕組みでエラーページを表示してるのか
結論.iconシステム内で指定のエラーが吐かれたら、そのエラーに応じたページを表示する
具体例
以下のようにdjango.http.Http404エラーが吐かれると...
code: excample.py
def index():
raise Http404()
djangoがデフォルトで用意してる404ページを表示する
https://scrapbox.io/files/6076f257988da8001cb7d5ee.png
他の代表的なエラーページはデフォルトで用意されている
2. エラーページを簡単にカスタマイズする方法
結論.icontemplatesフォルダ直下にステータスコード.htmlファイルを用意する
具体例
404ページをカスタマイズしたかったらtemplatesフォルダ直下に404.htmlというページを作成して置いておく
code: templates/404.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>aaa</title>
</head>
<body>
<p>Not Found 404</p>
</body>
</html>
他のエラーも同じようにすればOK
3. もう少しカスタムする方法
結論.iconurls.pyにてhandlerXXXに自分で用意したhandler関数を代入する
具体例
404ならそれ用のハンドラー関数をviews.pyに作成する
code: views.py
def handler404(reauest, exception):
return render(request, template_name="app/error/404.html")
project.urls.pyにて以下のように記載する
code: urls.py
handler404 = 'app.views.handler404'
urlpatterns = [
path('admin', include(...),
]
4. エラー表示させる場合の注意点
結論.iconsettings.DEBUG=Falseじゃないとエラーページが表示されないよ
デバッグモードがONのままだと、デバッグ専用のページが表示されちゃいます。
まとめ
hr.icon
エラーページは実際にErrorが発生してから表示される仕組みになってる
それぞれのエラーページを簡単にカスタムしたいなら、templatesフォルダ直下に専用のhtmlページを用意する
もう少しカスタムしたいなら、urls.pyにてhandlerXXXを上書きする
settings.DEBUG=Falseじゃないとエラーページ全般表示されない
参考